package pe.gob.pj.sri.web.action;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import pe.gob.pj.sri.bean.Usuario;
import pe.gob.pj.sri.servicio.UsuarioService;

@Scope("session")
@Controller("seguridadAction")
public class SeguridadAction {

	@Autowired
	private UsuarioService usuarioService;

	@Autowired
	private Usuario usuarioObj;

	private String usuario;
	private String password;
	private String mensajeFaltaUsuario;
	private String mensajeFaltaPassword;
	private boolean estadoPanelMensajes;
	private String estiloMensaje;
	private String errorMensaje;

	public boolean getEstadoPanelMensajes() {
		return estadoPanelMensajes;
	}

	public void setEstadoPanelMensajes(boolean estadoPanelMensajes) {
		this.estadoPanelMensajes = estadoPanelMensajes;
	}

	public String getEstiloMensaje() {
		return estiloMensaje;
	}

	public void setEstiloMensaje(String estiloMensaje) {
		this.estiloMensaje = estiloMensaje;
	}

	public String getErrorMensaje() {
		return errorMensaje;
	}

	public void setErrorMensaje(String errorMensaje) {
		this.errorMensaje = errorMensaje;
	}

	public String getMensajeFaltaUsuario() {
		return mensajeFaltaUsuario;
	}

	public void setMensajeFaltaUsuario(String mensajeFaltaUsuario) {
		this.mensajeFaltaUsuario = mensajeFaltaUsuario;
	}

	public String getMensajeFaltaPassword() {
		return mensajeFaltaPassword;
	}

	public void setMensajeFaltaPassword(String mensajeFaltaPassword) {
		this.mensajeFaltaPassword = mensajeFaltaPassword;
	}

	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * Iniciar Sesion
	 * 
	 * @return
	 */
	public String iniciarSesion() {
		System.out.println("login Usuario: " + usuario + " Password: "+ password);
		ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
		HttpSession session = (HttpSession)context.getSession(true);

		if (usuario.equals("")) {
			mensajeFaltaUsuario = "Ingrese usuario";
			System.out.println("usuario nulo o vacío");
		} else {
			if (password.equals("")) {
				mensajeFaltaPassword = "Ingrese password";
				System.out.println("password nulo o vacío");
			} else {
				try {
					usuarioObj = usuarioService.login(usuario, password);
					
					if(usuarioObj == null){
						errorMensaje = "Usuario y/o password incorrecto(s)";
						System.out.println("Usuario no existe");
					}else{
						System.out.println("Usuario existe");
						session.setAttribute("USUARIO_ACTUAL", usuarioObj);
						return "principal";
					}
				} catch (Exception e) {
					errorMensaje = "Ha ocurrido un error al conectarse a la base de datos";
				}
			}
		}
		this.estadoPanelMensajes = true;
		return "login";
	}

	public String cerrarSesion() {
		return "cerrar";
	}

	/**
	 * limpiar
	 */
	public void limpiar() {
		setUsuario("");
		setPassword("");
		setMensajeFaltaUsuario("");
		setMensajeFaltaPassword("");
		setErrorMensaje("");
		setEstiloMensaje("");
		setEstadoPanelMensajes(false);
	}

	public void eventoSeleccionarOpcionMenu() {
		try {

			// Variable para limpiar los objetos desde el menu
			// Utilitario.establecerObjetoSesion("limpiarPagina", "");

			// Obteniendo la ruta de la pagina a direccionar

			FacesContext contexto = FacesContext.getCurrentInstance();
			String ruta = contexto.getExternalContext()
					.getRequestParameterMap().get("ruta");
			HttpServletResponse response = (HttpServletResponse) contexto
					.getExternalContext().getResponse();
			System.out.println("ruta: " + ruta);
			response.sendRedirect(ruta);

		} catch (Exception e) {
			e.printStackTrace();

		}
	}

}
